package impRules;

import java.util.ArrayList;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.effect.Light;
import javafx.scene.effect.Lighting;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class Tabuleiro extends Application {

	private Stage palco;
	private Scene cena;
	private TextField caixaTexto;
	private Button botaoInicial;
	private TratadorEventos eventos;
	private Tabuleiro tabuleiro = Tabuleiro.this;
	private ArrayList<Circle> pecasAzuis = new ArrayList<Circle>();
	private ArrayList<Circle> pecasVermelhas = new ArrayList<Circle>();
	private ArrayList colecaoComponentes = new ArrayList();
	
	public static void main(String[] args){
		launch();
	}
		 
	@Override
	public void start(Stage palco) throws Exception {
		this.palco = palco;
		
		// Inicia o jogo
		inicializarTela();
	 }

	private void exibirTela(String titulo) {
		palco.setTitle(titulo);
		palco.setScene(cena);
		palco.setResizable(false);
		palco.show();
	}

	// Exibe tela inicial para informar nome do jogador
	public void inicializarTela() {
		eventos = new TratadorEventos(tabuleiro);
		
		criarPecas();
		criarTabuleiro();
		
		caixaTexto = new TextField();
		caixaTexto.setTranslateX(85);
		caixaTexto.setTranslateY(100);
		caixaTexto.setScaleX(2);
		caixaTexto.setScaleY(2);
		caixaTexto.setText("Digite seu nome...");
		caixaTexto.setOnMouseClicked(eventos);
		tabuleiro.colecaoComponentes.add(caixaTexto);
		
		botaoInicial = new Button("Clique para Iniciar!");
		botaoInicial.setTranslateX(100);
		botaoInicial.setTranslateY(180);
		botaoInicial.setScaleX(2);
		botaoInicial.setScaleY(2);
		botaoInicial.setOnMouseClicked(eventos);
		tabuleiro.colecaoComponentes.add(botaoInicial);
		
		Group componentes = new Group();
		componentes.getChildren().addAll(tabuleiro.colecaoComponentes);
	  
		cena = new Scene(componentes, 320, 320);
		cena.fillProperty();
		
		// Exibe a tela modificada
		exibirTela("Jogo de Damas");
	}

	// Cria o this
	private void criarTabuleiro() {
		int x=0;
		int y=0;
		Rectangle quadradoPreto = null;
		Rectangle quadradoBranco = null;
		
		for(int i=0; i < 320; i+=40){  
			for(int j=0; j < 320; j+=40){
				if((x+y)%2 == 0){
					quadradoPreto = new Rectangle(40, 40, Color.BLACK);
					quadradoPreto.setX(i);
					quadradoPreto.setY(j);
					tabuleiro.colecaoComponentes.add(quadradoPreto);
					  
				} else {
					quadradoBranco = new Rectangle(40, 40, Color.IVORY);
					quadradoBranco.setX(i);
					quadradoBranco.setY(j);
					tabuleiro.colecaoComponentes.add(quadradoBranco);
				}
				x++;
			}
			y++;
		}
	}
		
	// Cria as pecas de damas do this
	private void criarPecas() {

		int x=0;
		int y=0;
		Circle dama = null; 
					  
		  for(int i=0; i < 320; i+=40){  
			  for(int j=0; j < 320; j+=40){
				  if((x+y)%2 == 0){
					  if(j < 120){
						  dama = criarPeca(i, j, Color.DODGERBLUE);
						  tabuleiro.pecasAzuis.add(dama);
						  tabuleiro.colecaoComponentes.add(dama);
						  
					  } else if(j > 160){
						  dama = criarPeca(i, j, Color.FIREBRICK);
						  tabuleiro.pecasVermelhas.add(dama);
						  tabuleiro.colecaoComponentes.add(dama);
					  }
				  }
				  x++;
			  }
			  y++;
		}
	}

	private Circle criarPeca(int i, int j, Color cor) {

		Light.Distant light = new Light.Distant();
		light.setAzimuth(-135.0);
		
		Lighting luz = new Lighting();
		luz.setLight(light);
		luz.setSpecularConstant(0.5);
		luz.setSurfaceScale(2.5);
		
		Circle dama;
		dama = new Circle(15, cor);
		dama.setEffect(luz);
		dama.setCenterX(i+20);
		dama.setCenterY(j+20);
		dama.setVisible(false);
		dama.setOnMouseDragged(eventos);
		return dama;
	}

	public TextField getCaixaTexto() {
		return caixaTexto;
	}

	public void setCaixaTexto(TextField caixaTexto) {
		this.caixaTexto = caixaTexto;
	}

	public Button getBotaoInicial() {
		return botaoInicial;
	}

	public void setBotaoInicial(Button botaoInicial) {
		this.botaoInicial = botaoInicial;
	}
	
	// Exibe as pecas, ou desabilita-as
	public void exibirPecas(String pCdExibicao){
		
		if(pCdExibicao.equals(Constantes.CD_OPCAO_TODOS)){
			for(Circle pecas : pecasAzuis){
				pecas.setVisible(true);
				pecas.toFront();
			}
			for(Circle pecas : pecasVermelhas){
				pecas.setVisible(true);
				pecas.toFront();
			}
		} else if (pCdExibicao.equals(Constantes.CD_PECAS_AZUIS)){
			for(Circle pecas : pecasAzuis){
				pecas.setDisable(false);
			}
			for(Circle pecas : pecasVermelhas){
				pecas.setDisable(true);
			}
		} else if (pCdExibicao.equals(Constantes.CD_PECAS_VERMELHAS)){
			for(Circle pecas : pecasVermelhas){
				pecas.setDisable(false);
			}
			for(Circle pecas : pecasAzuis){
				pecas.setDisable(true);
			}
		}
	}
}

